package com.itheima.d1_inner_class1;


/**
 * 内部类
 * 是类中的五大成分之一（成员变量、方法、构造器、内部类、代码块），如果一个类定义在另一个类的内部，这个类就是内部类。
 * 场景：当一个类的内部，包含了一个完整的事物，且这个事物没有必要单独设计时，就可以把这个事物设计成内部类。
 */

/**
 * 成员内部类 :就是类中的一个普通成员，类似前面我们学过的普通的成员变量、成员方法。
 * 外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);
 * Outer.Inner in =  new Outer().new  Inner();
 *
 * 成员内部类中访问其他成员的特点：
 * 1、和前面学过的实例方法一样，成员内部类的实例方法中，同样可以直接访问外部类的实例成员、静态成员。
 * 2、可以在成员内部类的实例方法中，拿到当前外部类对象，格式是：外部类名.this。
 *
 * 总结一下内部类访问成员的特点
 * - 既可以访问内部类成员、也可以访问外部类成员
 * - 如果内部类成员和外部类成员同名，可以使用**`类名.this.成员`**区分
 */
public class Outer {
    private int age = 99;
    public static String a;
    // 成员内部类
    public class Inner{
        private String name;
        public static String schoolName; // JDK 16开始才支持定义静态成员的
        private int age = 88;

        public Inner() {
        }

        public void test(){
            System.out.println(age);
            System.out.println(a);

            int age = 66;
            System.out.println(age);// 66
            System.out.println(this.age);// 88
            System.out.println(Outer.this.age);// 99  //拿到当前外部类对象，格式是：外部类名.this
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public void test2(){
        System.out.println(age);
        System.out.println(a);
    }
}
